package Day_0226.AppearancePattern;

/**
 * @author zxc
 * @date 2023/02/26 23:13
 **/
public class AppearancePattern {
    public static void main(String[] args) {
        /**
         * 谈一谈对于外观模式的理解
         * ===》
         * 外观模式的定义
         * ===》
         * （1）外观模式 ：
         *  也叫门面模式，隐藏系统的复杂性，并向客户端提供了一个客户端可以访问系统的接口。
         * （2）它向现有的系统添加一个接口，用这一个接口来隐藏实际的系统的复杂性。
         * （2）使用外观模式，外部看起来就是一个接口，其实他的内部有很多复杂的接口已经被实现
         *
         * ===》
         * 总结 ：
         * （1）外观模式，对于具有复杂功能的系统进行封装，同时向外提供一个供访问的接口;
         * （2）未使用外观模式时，用户需要顺序地去调用各个功能所实现的方法，来实现每一个功能;
         *  若是使用了外观模式的话，则用户只需要调用封装了所有功能的接口方法，来实现与上述一致的效果;
         *
         */
    }
}
// 功能一 ：阿里短信消息
interface AliSmsService {
    void sendSms();
}
class AliSmsServiceImpl implements AliSmsService {
    public void sendSms() {
        System.out.println("阿里短信消息");
    }
}
// 功能二 ：发送邮件消息
interface EamilSmsService {
    void sendSms();
}
class EamilSmsServiceImpl implements EamilSmsService{
    public void sendSms() {
        System.out.println("发送邮件消息");
    }
}
// 功能三 ：微信消息推送
interface WeiXinSmsService {
    void sendSms();
}
class WeiXinSmsServiceImpl implements WeiXinSmsService {
    public void sendSms() {
        System.out.println("发送微信消息推送");
    }
}
// 使用一个外部接口，来封装内部系统的复杂性;
// 即，定义了Computer类后，使得上述所定义的三个功能 合并为一个接口被调用;
class Computer {
    AliSmsService aliSmsService;
    EamilSmsService eamilSmsService;
    WeiXinSmsService weiXinSmsService;
    public Computer() {
        aliSmsService = new AliSmsServiceImpl();
        eamilSmsService = new EamilSmsServiceImpl();
        weiXinSmsService = new WeiXinSmsServiceImpl();
    }
    public void sendMsg() {
        aliSmsService.sendSms();
        eamilSmsService.sendSms();
        weiXinSmsService.sendSms();
    }
}
class Client {
    public static void main(String[] args) {
        //普通模式需要这样
        AliSmsService aliSmsService = new AliSmsServiceImpl();
        EamilSmsService eamilSmsService = new EamilSmsServiceImpl();
        WeiXinSmsService weiXinSmsService = new WeiXinSmsServiceImpl();
        aliSmsService.sendSms();
        eamilSmsService.sendSms();
        weiXinSmsService.sendSms();
        System.out.println("===========================");
        //利用外观模式简化方法
        new Computer().sendMsg();
    }
}
